import { NextRequest, NextResponse } from 'next/server'
import { getServerSession } from 'next-auth'
import { authOptions } from '@/lib/auth'
import prisma from '@/lib/prisma'
import bcrypt from 'bcryptjs'

// 获取单个用户详情
export async function GET(
  req: NextRequest,
  { params }: { params: { id: string } }
) {
  try {
    const session = await getServerSession(authOptions)
    if (!session) {
      return NextResponse.json({ message: '未授权' }, { status: 401 })
    }

    const { id } = params

    // 用户只能查看自己的详情，管理员和教师可以查看所有用户
    if (session.user.id !== id && session.user.role !== 'ADMIN' && session.user.role !== 'TEACHER') {
      return NextResponse.json({ message: '权限不足' }, { status: 403 })
    }

    const user = await prisma.user.findUnique({
      where: { id },
      select: {
        id: true,
        name: true,
        email: true,
        role: true,
        createdAt: true,
      },
    })

    if (!user) {
      return NextResponse.json({ message: '用户不存在' }, { status: 404 })
    }

    // 如果是学生，获取他们的实验提交情况
    let experimentSubmissions = null
    if (user.role === 'STUDENT') {
      experimentSubmissions = await prisma.experimentSubmission.findMany({
        where: { studentId: id },
        include: {
          experiment: {
            select: {
              id: true,
              title: true,
              startTime: true,
              endTime: true,
            },
          },
        },
        orderBy: {
          updatedAt: 'desc',
        },
      })
    }

    // 如果是教师，获取他们创建的实验
    let createdExperiments = null
    if (user.role === 'TEACHER' || user.role === 'ADMIN') {
      createdExperiments = await prisma.experiment.findMany({
        where: { createdById: id },
        select: {
          id: true,
          title: true,
          startTime: true,
          endTime: true,
          _count: {
            select: {
              submissions: true,
            },
          },
        },
        orderBy: {
          createdAt: 'desc',
        },
      })
    }

    return NextResponse.json({
      user,
      experimentSubmissions,
      createdExperiments,
    })
  } catch (error) {
    console.error('获取用户详情失败:', error)
    return NextResponse.json({ message: '服务器错误' }, { status: 500 })
  }
}

// 更新用户信息
export async function PUT(
  req: NextRequest,
  { params }: { params: { id: string } }
) {
  try {
    const session = await getServerSession(authOptions)
    if (!session) {
      return NextResponse.json({ message: '未授权' }, { status: 401 })
    }

    const { id } = params
    const { name, email, password, role } = await req.json()

    // 检查权限
    // 用户可以更新自己的姓名和密码，但不能更改角色
    // 管理员可以更新所有信息
    if (session.user.id !== id && session.user.role !== 'ADMIN') {
      return NextResponse.json({ message: '权限不足' }, { status: 403 })
    }

    // 检查用户是否存在
    const user = await prisma.user.findUnique({
      where: { id },
    })

    if (!user) {
      return NextResponse.json({ message: '用户不存在' }, { status: 404 })
    }

    // 准备更新数据
    const updateData: any = {}
    if (name) updateData.name = name
    
    // 只有管理员可以更改角色和邮箱
    if (session.user.role === 'ADMIN') {
      if (email && email !== user.email) {
        // 检查邮箱是否已被使用
        const existingUser = await prisma.user.findUnique({
          where: { email },
        })
        if (existingUser && existingUser.id !== id) {
          return NextResponse.json(
            { message: '该邮箱已被注册' },
            { status: 400 }
          )
        }
        updateData.email = email
      }
      
      if (role) updateData.role = role
    }

    // 更新密码
    if (password) {
      updateData.password = await bcrypt.hash(password, 10)
    }

    // 更新用户
    const updatedUser = await prisma.user.update({
      where: { id },
      data: updateData,
      select: {
        id: true,
        name: true,
        email: true,
        role: true,
        createdAt: true,
        updatedAt: true,
      },
    })

    return NextResponse.json({ user: updatedUser })
  } catch (error) {
    console.error('更新用户失败:', error)
    return NextResponse.json({ message: '服务器错误' }, { status: 500 })
  }
}

// 删除用户
export async function DELETE(
  req: NextRequest,
  { params }: { params: { id: string } }
) {
  try {
    const session = await getServerSession(authOptions)
    if (!session) {
      return NextResponse.json({ message: '未授权' }, { status: 401 })
    }

    // 只有管理员可以删除用户
    if (session.user.role !== 'ADMIN') {
      return NextResponse.json({ message: '权限不足' }, { status: 403 })
    }

    const { id } = params

    // 检查用户是否存在
    const user = await prisma.user.findUnique({
      where: { id },
    })

    if (!user) {
      return NextResponse.json({ message: '用户不存在' }, { status: 404 })
    }

    // 删除用户
    await prisma.user.delete({
      where: { id },
    })

    return NextResponse.json({ message: '用户已删除' })
  } catch (error) {
    console.error('删除用户失败:', error)
    return NextResponse.json({ message: '服务器错误' }, { status: 500 })
  }
} 